home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / comm / tcp / Amster.lha / Amster_Install / Source / search.c < prev    next >
C/C++ Source or Header  |  2000-07-19  |  10KB  |  352 lines

  1. /*
  2. ** Amster - Search
  3. */
  4.  
  5. #include "include/config.h"
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. #include <proto/dos.h>
  12.  
  13. #include "include/mui.h"
  14. #include <MUI/Lamp_mcc.h>
  15. #include <MUI/NListview_mcc.h>
  16.  
  17. #include "include/gui.h"
  18. #include "include/search.h"
  19. #include "include/protos.h"
  20. #include "include/napster.h"
  21. #include "include/download.h"
  22. #include "include/hotlist.h"
  23. #include "include/panel.h"
  24. #include "include/prefs.h"
  25. #include "include/resultview.h"
  26. #include "amster_Cat.h"
  27. #include "include/protos.h"
  28.  
  29. ULONG search_new(struct IClass *cl, Object *obj, struct opSet *msg);
  30. void search_go(struct searchdata *data, char *sname);
  31. void search_reset(struct searchdata *data);
  32. void search_set(struct searchdata *data);
  33. void search_use(struct searchdata *data);
  34.  
  35. int search_state = 0;
  36.  
  37.  
  38. MUIF search_dispatch(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
  39. {
  40.     struct searchdata *data;
  41.  
  42.     switch (msg->MethodID) {
  43.         case OM_NEW:
  44.             return(search_new(cl,obj,(APTR)msg));
  45.         case SEARCH_GO:
  46.             data = INST_DATA(cl, obj);
  47.             search_go(data, (char *)(((muimsg)msg)->arg1));
  48.             return NULL;
  49.         case SEARCH_NICK:
  50.             {
  51.             u_long tmp;
  52.             data = INST_DATA(cl, obj);
  53.  
  54.             if ((char *)(((muimsg)msg)->arg1) == NULL) {
  55.                 GetAttr(MUIA_String_Contents, data->snick, &tmp);
  56.                 if (tmp && ((char *)tmp)[0] != '\0') DoMethod(gui->WI_Hotlist, HOTLIST_NICK, (char *)tmp);
  57.             }
  58.             else DoMethod(gui->WI_Hotlist, HOTLIST_NICK, (char *)(((muimsg)msg)->arg1));
  59.             return NULL;
  60.             }
  61.         case SEARCH_FOUND:
  62.             data = INST_DATA(cl, obj);
  63.             DoMethod(data->LV_Search, RESULTVIEW_FOUND, (song)(((muimsg)msg)->arg1));
  64.             return NULL;
  65.         case SEARCH_CLEAR:
  66.             data = INST_DATA(cl, obj);
  67.             DoMethod(data->LV_Search, RESULTVIEW_CLEAR, (((muimsg)msg)->arg1));
  68.             return NULL;
  69.         case SEARCH_RESET:
  70.             data = INST_DATA(cl, obj);
  71.             search_reset(data);
  72.             return NULL;
  73.         case SEARCH_SET:
  74.             data = INST_DATA(cl, obj);
  75.             search_set(data);
  76.             return NULL;
  77.         case SEARCH_GET:
  78.             data = INST_DATA(cl, obj);
  79.             search_use(data);
  80.             return NULL;
  81.         case SEARCH_USE:
  82.             data = INST_DATA(cl, obj);
  83.             search_use(data);
  84.             prf_save("ENV:"AMSTER_PREFS);
  85.             DoMethod(data->pop, MUIM_Popstring_Close, TRUE);
  86.             return NULL;
  87.         case SEARCH_GETSTATE:
  88.             data = INST_DATA(cl, obj);
  89.             DoMethod(data->LV_Search, RESULTVIEW_GETSTATE);
  90.             return NULL;
  91.         case SEARCH_TOGGLE:
  92.             data = INST_DATA(cl, obj);
  93.             DoMethod(data->LV_Search, RESULTVIEW_TOGGLE_ONE);
  94.             return NULL;
  95.         case SEARCH_FILLSTEM:
  96.             data = INST_DATA(cl, obj);
  97.             DoMethod(data->LV_Search, RESULTVIEW_FILLSTEM, (((muimsg)msg)->arg1));
  98.             return NULL;
  99.         case SEARCH_DOWNLOAD:
  100.             data = INST_DATA(cl, obj);
  101.             DoMethod(data->LV_Search, RESULTVIEW_DOWNLOAD, 3, (((muimsg)msg)->arg1));
  102.             return NULL;
  103.     }
  104.     return(DoSuperMethodA(cl, obj, msg));
  105. }
  106.  
  107.  
  108. ULONG search_new(struct IClass *cl, Object *obj, struct opSet *msg)
  109. {
  110.     static char *numbers = "0123456789";
  111.     static char *opts[] = {
  112.         (char*)_MSG_COMPARE_NONE,
  113.         (char*)_MSG_COMPARE_ATLEAST,
  114.         (char*)_MSG_COMPARE_EQUALTO,
  115.         (char*)_MSG_COMPARE_ATBEST,
  116.         NULL
  117.     };
  118.     struct searchdata *data;
  119.     Object *str,*maxstr,*snick,*sbut,*nbut;
  120.     Object *pop;
  121.     Object *popspeed, *popspeedval, *popbit, *popbitval, *popfreq, *popfreqval;
  122.     Object *popuse, *popreset;
  123.     Object *LV_Search;
  124.  
  125.     if (UseLamps || UseTWF) gColFormat = "COL=0 BAR, COL=1 BAR, COL=2 BAR, COL=3 BAR, COL=4 BAR, COL=5 BAR, COL=6 BAR, COL=7 BAR";
  126.     else gColFormat = "COL=1 BAR, COL=2 BAR, COL=3 BAR, COL=4 BAR, COL=5 BAR, COL=6 BAR, COL=7 BAR";
  127.  
  128.     if (opts[0] == (char *)_MSG_COMPARE_NONE)
  129.         localize_array(opts);
  130.  
  131.     if (obj = (Object *)DoSuperNew(cl,obj,
  132.         Child, VGroup,
  133.             Child, ColGroup(2),
  134.                 Child, Label2(MSG_SEARCH),
  135.                 Child, HGroup,
  136.                     Child, str = StringObject,
  137.                         StringFrame,
  138.                         MUIA_HorizWeight, 400,
  139.                         MUIA_String_MaxLen, 80,
  140.                         MUIA_CycleChain, 1,
  141.                     End,
  142.                     Child, sbut = SimpleButton(MSG_SEARCH_GAD),
  143.                 End,
  144.                 Child, Label2(MSG_SEARCHUSER),
  145.                 Child, HGroup,
  146.                     Child, snick = StringObject,
  147.                         StringFrame,
  148.                         MUIA_HorizWeight, 400,
  149.                         MUIA_String_MaxLen, 20,
  150.                         MUIA_CycleChain, 1,
  151.                         MUIA_ShortHelp, MSG_SEARCHUSER_HELP,
  152.                     End,
  153.                     Child, nbut = SimpleButton(MSG_SEARCHUSER_GAD),
  154.                     Child, Label2(MSG_MAX),
  155.                     Child, maxstr = StringObject,
  156.                         StringFrame,
  157.                         MUIA_String_Accept, numbers,
  158.                         MUIA_String_Integer, 100,
  159.                         MUIA_String_MaxLen, 4,
  160.                         MUIA_CycleChain, 1,
  161.                     End,
  162.                     Child, pop = PopobjectObject,
  163.                         MUIA_Popstring_Button, PopButton(MUII_PopUp),
  164.                         MUIA_Popobject_Object, VGroup,
  165.                             MUIA_Frame, MUIV_Frame_PopUp,
  166.                             Child, TextObject,
  167.                                 MUIA_Text_Contents, MSG_ADVSEARCH,
  168.                             End,
  169.                             Child, ColGroup(3),
  170.                                 Child, Label2(MSG_LINESPEED),
  171.                                 Child, popspeed = CycleObject,
  172.                                     MUIA_Cycle_Active, 0,
  173.                                     MUIA_Cycle_Entries, opts,
  174.                                     MUIA_CycleChain, 1,
  175.                                 End,
  176.                                 Child, popspeedval = CycleObject,
  177.                                     MUIA_Cycle_Active, 1,
  178.                                     MUIA_Cycle_Entries, nap_linktype,
  179.                                     MUIA_CycleChain, 1,
  180.                                 End,
  181.                                 Child, Label2(MSG_BITRATE),
  182.                                 Child, popbit = CycleObject,
  183.                                     MUIA_Cycle_Active, 0,
  184.                                     MUIA_Cycle_Entries, opts,
  185.                                     MUIA_CycleChain, 1,
  186.                                 End,
  187.                                 Child, HGroup,
  188.                                     Child, popbitval = StringObject,
  189.                                         StringFrame,
  190.                                         MUIA_String_Accept, numbers,
  191.                                         MUIA_String_Integer, 128,
  192.                                         MUIA_String_MaxLen, 4,
  193.                                         MUIA_CycleChain, 1,
  194.                                     End,
  195.                                     Child, Label2(MSG_KBPS),
  196.                                 End,
  197.                                 Child, Label2(MSG_FREQUENCY),
  198.                                 Child, popfreq = CycleObject,
  199.                                     MUIA_Cycle_Active, 0,
  200.                                     MUIA_Cycle_Entries, opts,
  201.                                     MUIA_CycleChain, 1,
  202.                                 End,
  203.                                 Child, HGroup,
  204.                                     Child, popfreqval = StringObject,
  205.                                         StringFrame,
  206.                                         MUIA_String_Accept, numbers,
  207.                                         MUIA_String_Integer, 44100,
  208.                                         MUIA_String_MaxLen, 6,
  209.                                         MUIA_CycleChain, 1,
  210.                                     End,
  211.                                     Child, Label2(MSG_HZ),
  212.                                 End,
  213.                             End,
  214.                             Child, HGroup,
  215.                                 Child, popuse = SimpleButton(MSG_ADVUSE_GAD),
  216.                                 Child, HSpace(0),
  217.                                 Child, popreset = SimpleButton(MSG_ADVRESET_GAD),
  218.                             End,
  219.                         End,
  220.                     End,
  221.                 End,
  222.             End,
  223.             Child, LV_Search = NewObject(gui->resultview_mcc->mcc_Class, NULL, TAG_DONE),
  224.         End,
  225.         TAG_MORE, msg->ops_AttrList))
  226.     {
  227.         data = INST_DATA(cl, obj);
  228.         data->str = str;
  229.         data->maxstr = maxstr;
  230.         data->snick = snick;
  231.         data->pop = pop;
  232.         data->popspeed = popspeed;
  233.         data->popspeedval = popspeedval;
  234.         data->popbit = popbit;
  235.         data->popbitval = popbitval;
  236.         data->popfreq = popfreq;
  237.         data->popfreqval = popfreqval;
  238.         data->LV_Search = LV_Search;
  239.  
  240.         DoMethod(str,   MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, obj, 2, SEARCH_GO, NULL);
  241.         DoMethod(sbut,  MUIM_Notify, MUIA_Pressed, FALSE, obj, 2, SEARCH_GO, NULL);
  242.         DoMethod(snick, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, obj, 2, SEARCH_NICK, NULL);
  243.         DoMethod(nbut,  MUIM_Notify, MUIA_Pressed, FALSE, obj, 2, SEARCH_NICK, NULL);
  244.  
  245.         DoMethod(popuse,   MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, SEARCH_USE  );
  246.         DoMethod(popreset, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, SEARCH_RESET);
  247.  
  248.         return((ULONG)obj);
  249.     }
  250.     return(0);
  251. }
  252.  
  253.  
  254. void search_go(struct searchdata *data, char *sname)
  255. {
  256.     static char *opts[] = {
  257.         "AT LEAST",
  258.         "EQUAL TO",
  259.         "AT BEST"
  260.     };
  261.     char *p, str[80];
  262.     u_long tmp, tmp2;
  263.  
  264.     if (gui_onlinestate < ONLINE) return;
  265.  
  266.     if (sname) {
  267.         tmp = (u_long)sname;
  268.     }
  269.     else {
  270.         GetAttr(MUIA_String_Contents, data->str, &tmp);
  271.         if (!tmp || ((char*)tmp)[0]==0) return;
  272.     }
  273.     GetAttr(MUIA_String_Integer, data->maxstr, &tmp2);
  274.     if (tmp2<3) tmp2=3;
  275. /*    if (tmp2>100) tmp2=100;*/
  276.     if (strlen(str) > 79) {
  277.         strncpy(str, (char *)tmp, 79);
  278.         str[79] = '\0';
  279.     }
  280.     else strcpy(str, (char *)tmp);
  281.     strlwr(str);
  282.     p = nap_buf + sprintf(nap_buf, "FILENAME CONTAINS \"%s\" MAX_RESULTS %d", str, tmp2);
  283.  
  284.     GetAttr(MUIA_Cycle_Active, data->popspeed, &tmp);
  285.     GetAttr(MUIA_Cycle_Active, data->popspeedval, &tmp2);
  286.     if(tmp) p=p+sprintf(p, " LINESPEED \"%s\" %d", opts[tmp-1], tmp2);
  287.  
  288.     GetAttr(MUIA_Cycle_Active, data->popbit, &tmp);
  289.     GetAttr(MUIA_String_Integer, data->popbitval, &tmp2);
  290.     if(tmp) p=p+sprintf(p, " BITRATE \"%s\" %d", opts[tmp-1], tmp2);
  291.  
  292.     GetAttr(MUIA_Cycle_Active, data->popfreq, &tmp);
  293.     GetAttr(MUIA_String_Integer, data->popfreqval, &tmp2);
  294.     if(tmp) sprintf(p, " FREQ \"%s\" %d", opts[tmp-1], tmp2);
  295.  
  296.     if (prf->clrlist) DoMethod(data->LV_Search, RESULTVIEW_CLEAR, CLEAR_ALL);
  297.     DoMethod(data->LV_Search, RESULTVIEW_RESETCOUNT);
  298.  
  299.     DoMethod(data->LV_Search, RESULTVIEW_STAT2, 1);
  300.     nap_send(NAPC_SEARCH);
  301. }
  302.  
  303.  
  304. void search_reset(struct searchdata *data)
  305. {
  306.     set(data->popspeed,    MUIA_Cycle_Active,   0);
  307.     set(data->popspeedval, MUIA_Cycle_Active,   1);
  308.     set(data->popbit,      MUIA_Cycle_Active,   0);
  309.     set(data->popbitval,   MUIA_String_Integer, 128);
  310.     set(data->popfreq,     MUIA_Cycle_Active,   0);
  311.     set(data->popfreqval,  MUIA_String_Integer, 44100);
  312. }
  313.  
  314.  
  315. void search_set(struct searchdata *data)
  316. {
  317.     set(data->maxstr,      MUIA_String_Integer, prf->max);
  318.     set(data->popspeed,    MUIA_Cycle_Active,   prf->speedqual);
  319.     set(data->popspeedval, MUIA_Cycle_Active,   prf->speedval);
  320.     set(data->popbit,      MUIA_Cycle_Active,   prf->bitratequal);
  321.     set(data->popbitval,   MUIA_String_Integer, prf->bitrateval);
  322.     set(data->popfreq,     MUIA_Cycle_Active,   prf->freqqual);
  323.     set(data->popfreqval,  MUIA_String_Integer, prf->freqval);
  324. }
  325.  
  326.  
  327. void search_use(struct searchdata *data)
  328. {
  329.     u_long tmp;
  330.  
  331.     GetAttr(MUIA_Cycle_Active,data->popspeed,&tmp);
  332.     prf->speedqual = tmp;
  333.  
  334.     GetAttr(MUIA_Cycle_Active,data->popspeedval,&tmp);
  335.     prf->speedval = tmp;
  336.  
  337.     GetAttr(MUIA_Cycle_Active,data->popbit,&tmp);
  338.     prf->bitratequal = tmp;
  339.  
  340.     GetAttr(MUIA_String_Integer,data->popbitval,&tmp);
  341.     prf->bitrateval = (int)tmp;
  342.  
  343.     GetAttr(MUIA_Cycle_Active,data->popfreq,&tmp);
  344.     prf->freqqual = tmp;
  345.  
  346.     GetAttr(MUIA_String_Integer,data->popfreqval,&tmp);
  347.     prf->freqval = (int)tmp;
  348.  
  349.     GetAttr(MUIA_String_Integer,data->maxstr,&tmp);
  350.     prf->max = (int)tmp;
  351. }
  352.